package com.ofwiki.demo.job;

import com.ofwiki.demo.scheduler.common.JobHandler;
import com.ofwiki.demo.scheduler.common.JobHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class TestJos {
    private final Logger logger = LoggerFactory.getLogger(TestJos.class);

    // TODO 1. 项目启动后所有 @JobHandler 注解内容，将自动保存到表 tb_jobs
    // TODO 2. 使用 @JobHandler 声明方法为JobHandler, 运营管理界面 只能针对JobHandler方法配置执行计划
    // TODO 3. 使用帮助类 JobHelper 获取执行参数等信息，及声明任务执行结果，
    //

    @JobHandler(value = "testJob1",desc = "定时任务示例1")
    public void demoHandler1() {
        // 获取任务参数
        String jobParam = JobHelper.getJobParam();
        Long jobId = JobHelper.getJobId();
        logger.info("定时任务示例1,任务参数：{},jobId:{}", jobParam, jobId);


        // TODO 可以通过以下方法，标明方法的执行结果，该结果会根据 tb_jobs.logDurable 的配置决定是否持久化至表 tb_job_logs
        // 成功方法： 默认 handlerCode 为 200
        //JobHelper.handleSuccess("{\"data\":\"执行成功\"}");
        // 失败方法： 默认 handlerCode 为 200
        //JobHelper.handleFail("{\"data\":\"执行失败\"}");
        // 自定义指定 handlerCode，handlerMsg
        JobHelper.handleResult(1000, "执行成功");
    }

    // TODO 通过定时任务触发的方法入参为null,
    @JobHandler(value = "testJob2",desc = "定时任务示例2")
    public void demoHandler2(String args) {
        // TODO 没有调用 JobHelper.handleResult 等方法，则handlerCode默认为200，handlerMsg = null
        // 获取任务参数
        String jobParam = JobHelper.getJobParam();
        logger.info("定时任务示例2 方法参数:{},任务参数:{}", args, jobParam);
    }

    @JobHandler(value = "testJob3",desc = "定时任务示例3")
    public void demoHandler3(String args) {
        // TODO 方法向外抛出异常时，tb_job_logs.exec_status 则为 500 标明任务执行异常
        String jobParam = JobHelper.getJobParam();
        logger.info("定时任务示例3 方法参数:{},任务参数:{}", args, jobParam);
        if (jobParam == null) {
            throw new RuntimeException("jobParam is null");
        }
    }
}
